#include<bits/stdc++.h>
using namespace std;
#define ll long long
// #define int long long
#define sz(s) (int)s.size()
const int N=5e5+5;
int n,c[N<<1],t[N<<1],id,a[N<<1],ct,nw;
ll b[N],C,ans[N<<1],Mn;
vector<int>s[N],p[N<<1],Ans;
inline static int read(){
    int x=0; char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))x=x*10+(ch^48),ch=getchar();
    return x;
}
// int tn[N];
// int q[N<<1],hd,tl,nw;
// vector<int>ans;
// ll ck(int mid,ll rs=0){
//     int i,j,k,l,r,x,y,z;
//     for(i=1,nw=0;i<=n;++i)tn[i]=0;
//     for(i=1,hd=1,tl=0,x=1;i<=id+1;++i){
//         while(hd<=tl&&c[q[hd]]+mid<=c[i]){
//             k=c[q[hd]]+mid,rs+=C*(k-x)*nw,x=k;
//             for(auto u:t[q[hd]])nw-=!--tn[u];
//             hd++;
//         } rs+=C*(c[i]-x)*nw,x=c[i],y=0;
//         for(auto u:t[i])y+=!tn[u]++;
//         nw+=y,rs+=b[y],q[++tl]=i;
//         printf("%lld ",rs);
//     } puts("");return rs;
// }
signed main(){
    ios::sync_with_stdio(false);
    freopen("list.in","r",stdin);
    freopen("list.out","w",stdout);
    int i,j,k,l,r,x,y,z;
    n=read();
    for(i=1;i<=n;++i){
        for(j=1,x=read(),nw+=x;j<=x;++j)
            s[i].push_back(c[++id]=read());
        for(j=1;j<sz(s[i]);++j)a[++ct]=s[i][j]-s[i][j-1]+1;
    } 
    for(C=read(),i=1;i<=n;++i)b[i]=1ll*read()*i;
    sort(c+1,c+1+id),id=unique(c+1,c+1+id)-c-1;
    sort(a+1,a+1+ct),ct=unique(a+1,a+1+ct)-a-1;
    for(i=1,a[0]=1,k=0,ans[0]=nw*C;i<=n;++i){
        for(auto &u:s[i])t[u=lower_bound(c+1,c+1+id,u)-c]++;
        for(j=1;j<(sz(s[i]));++j){
            x=lower_bound(a+1,a+1+ct,c[s[i][j]]-c[s[i][j-1]]+1)-a;
            // printf("%d ",a[x]);
            p[x].push_back(s[i][j]);
        } nw-=!!sz(s[i]),k+=!!sz(s[i]);
        // puts("");
    } for(i=1;i<=id;++i)ans[0]+=b[t[i]];
    Mn=ans[0],Ans.push_back(1);
    // printf("%lld\n",ans[0]);
    for(i=1;i<=ct;++i){
        ans[i]=ans[i-1];
        for(auto u:p[i]){
            t[u]--,x=t[u];
            // printf("%d ",c[u]);
            ans[i]+=b[x]-b[x+1],nw--,ans[i]+=(a[i]-a[i-1]-1ll)*C;
        } ans[i]+=1ll*(nw+k)*(a[i]-a[i-1])*C; 
        // puts("");
        if(ans[i]<Mn)Mn=ans[i],Ans.clear();
        if(ans[i]==Mn)Ans.push_back(a[i]);
        // printf("%lld\n",ans[i]);
    } printf("%lld %d\n",Mn,sz(Ans));
    for(auto u:Ans)printf("%d ",u);puts("");
    // l=1,r=c[id],x=1,c[id+1]=2e9;
    // ck(3),ck(4);    
    // while(l<r){
    //     int m1=l+(x=(l+r)/3),m2=r-x;
    //     if(m1==m2&&m2<r)m2++;
    //     if(m1==m2&&m1>l)m1--;
    //     ll w1=ck(m1),w2=ck(m2);
    //     if(w1<=w2)x=m1,r=m2-1;
    //     else x=m2,l=m1+1;
    // } printf("%lld ",ck(x));
    // if(x>1&&ck(x-1)==ck(x))ans.push_back(x-1);
    // ans.push_back(x); if(ck(x+1)==ck(x))ans.push_back(x+1);
    // for(printf("%d\n",x=(int)ans.size()),i=0;i<x;++i)printf("%d ",ans[i]);
    return 0;
}